
package com.tencent.weibo.api
{
	import com.tencent.weibo.log.LevelLogger;
	import com.tencent.weibo.operation.IRequestOperation;
	import com.tencent.weibo.operation.URLRequestOperation;
	
	import flash.events.IEventDispatcher;
	import flash.net.FileReference;
	
	import mx.logging.ILogger;
	
	/**
	 * 用户账户相关的API
	 * @langversion 3.0
	 * @playerversion Flash 9
	 * @playerversion AIR 1.1
	 *
	 */
	public class Account extends AbstractAPI
	{
		/**
		 * 日志输出对象
		 */
		public static var logger:ILogger=LevelLogger.getLogger("com.tencent.weibo.api.Account");
		
		/**
		 * 1.获取自己的详细资料
		 * @return IRequestOperation实例
		 */		
		public function info():IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"user/info";
			var attachParms:Object = {};
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 2.更新用户信息
		 * @param nick 昵称
		 * @param sex 性别0 ，1：男2：女
		 * @param year 出生年1900-2010
		 * @param month 出生月1-12
		 * @param day 出生日1-31
		 * @param countrycode 国家码
		 * @param provincecode 地区码
		 * @param citycode 城市码
		 * @param introduction 个人介绍
		 * @return IRequestOperation实例
		 */			
		public function update(nick:String,sex:int,year:int,month:int,day:int,countrycode:String,provincecode:String,citycode:String,introduction:String):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"user/update";
			var attachParms:Object = {};
			attachParms.nick = nick;
			attachParms.sex = sex;
			attachParms.year = year;
			attachParms.month = month;
			attachParms.day = day;
			attachParms.countrycode = countrycode;
			attachParms.provincecode = provincecode;
			attachParms.citycode = citycode;
			attachParms.introduction = introduction;
			return generateDataRequest(url,attachParms,"POST");
		}
		/**
		 * 3.更新用户头像信息
		 * @param file 上传的文件
		 * @return IRequestOperation实例
		 */		
		public function updateHead(file:FileReference):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"user/update_head";
			var attachParms:Object = {};
			attachParms.Filename = file.name;
			attachParms.Upload = "Submit Query";
			return generateFileRequest(url,attachParms,"pic",file);
		}
		/**
		 * 4.更新用户教育信息
		 * @param feildid 教育信息记录id （添加feildid=1.修改填返回的id,删除下面四个参数为空）
		 * @param year 入学年限
		 * @param schoolid 学校id
		 * @param departmentid 院系id
		 * @param level 学历
		 * @return IRequestOperation实例
		 */				
		public function updateEdu(feildid:String,year:int,schoolid:String,departmentid:String,level:String):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"user/update_edu";
			var attachParms:Object = {};
			attachParms.feildid = feildid;
			attachParms.year = year;
			attachParms.schoolid = schoolid;
			attachParms.departmentid = departmentid;
			attachParms.level = level;
			return generateDataRequest(url,attachParms,"POST");
		}
		/**
		 * 5.获取其他人的详细资料
		 * @param name 他人的帐户名（可选）
		 * @param fopenid 他人的openid（可选）name和fopenid至少选一个，若同时存在则以name值为主
		 * @return IRequestOperation实例
		 */		
		public function otherInfo(name:String=null,fopenid:String=null):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"user/other_info";
			var attachParms:Object = {};
			if(name != null)
				attachParms.name = name;
			if(fopenid != null)
				attachParms.fopenid = fopenid;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 6.获取一批人的简单资料
		 * @param names 用户id列表，用逗号“,”隔开，如 abc,edf,xxxx（可选）
		 * @param fopenids 你需要读取的用户openid列表，用下划线“_”隔开，names和fopenids至少选一个，若同时存在则以names值为主
		 * @return IRequestOperation实例
		 */		
		public function infos(names:String=null,fopenids:String=null):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"user/infos";
			var attachParms:Object = {};
			if(names != null)
				attachParms.names = names;
			if(fopenids != null)
				attachParms.fopenids = fopenids;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 7.验证账户是否合法（是否注册微博）
		 * @param name 他人的帐户名（可选）
		 * @param fopenid 他人的openid（可选） name和fopenid至少选一个，若同时存在则以name值为主
		 * @return IRequestOperation实例
		 */		
		public function verify(name:String=null,fopenid:String=null):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"user/verify";
			var attachParms:Object = {};
			if(name != null)
				attachParms.name = name;
			if(fopenid != null)
				attachParms.fopenid = fopenid;
			return generateDataRequest(url,attachParms,"POST");
		}
		/**
		 * 8.获取心情微博
		 * @param name 他人的帐户名（可选）
		 * @param fopenid 他人的openid（可选）name和fopenid至少选一个，若同时存在则以name值为主
		 * @param pageflag （pageflag=0表示回首页,pageflag=1表示向下翻页：id和timestamp是上一页的最后一个帖子ID和时间(不是根节点)；pageflag=2表示向上翻页：id和timestamp是下一页的第一个帖子ID和时间(不是根节点)；
		 * @param id 第一次请求填0,后面按照pageflag的说明进行翻页操作
		 * @param timestamp 第一次请求填0,后面按照pageflag的说明进行翻页操作
		 * @param type 表示取哪个类型的Twt，按位使用。0x00所有类型0x1-原创发表、0x2-转载、0x4-私信、0x8-回复、0x10-空回、0x20-提及、0x40-点评；
		 * @param contentType 正文类型（按位使用）：1-带文本(这一位一定有) 2-带链接4-带图片8-带视频0x10-带音频0x20-微群消息0x40-带电话录音(IVR语音微博) 0x80-正文非空
		 * @param accesslevel 表示取哪种类型的访问权限，0表示所有访问权限
		 * @param emotiontype 自定义标志位，表示取那种心情类型的帖子，按值使用。0xFFFFFFFF表示取所有类型;
		 * @param reqnum 请求拉取的帖子数，不能超过70；
		 * @return IRequestOperation实例
		 */		
		public function emotion(name:String=null,fopenid:String=null,pageflag:int=0,id:String="0",timestamp:int=0,type:int=0,contentType:int=0,accesslevel:int=0,emotiontype:int=0xFFFFFF,reqnum:int=20):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"user/emotion";
			var attachParms:Object = {};
			if(name != null)
				attachParms.name = name;
			if(fopenid != null)
				attachParms.fopenid = fopenid;
			attachParms.pageflag = pageflag;
			attachParms.id = id;
			attachParms.timestamp = timestamp;
			attachParms.type = type;
			attachParms.contentType = contentType;
			attachParms.accesslevel = accesslevel;
			attachParms.emotiontype = emotiontype;
			attachParms.reqnum = reqnum;
			return generateDataRequest(url,attachParms,"POST");
		}
		
	}
}